package com.zzptc.ly.bookcity.Utils;

import android.util.Log;

import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.charset.Charset;

public class ProcessText {

    public long pages;//总页数
    public final int SIZE = 3000;//每一页的字节数 字节数固定
    public long bytescount;//字节总数
    public long currentpage;//当前页面
    public RandomAccessFile readFile;

    //构造方法 传入当前页 为了实现书签的功能 记录用户读取的文章位置
    public ProcessText(File file, int currentpage)  {
        try {
            readFile = new RandomAccessFile(file,"r");
            bytescount = readFile.length();//获得字节总数
            pages = bytescount/SIZE;//计算得出文本的页数
            Log.e("11",pages+"");
            this.currentpage=currentpage;
        } catch (Exception e) {
            e.printStackTrace();
        }
    }


    //定位字节位置 根据页数定位文本的位置
    private void seek(long page){
        try {
            readFile.seek(page*SIZE);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }





//固定读取 SIZE+8个字节的内容 为什么+8 ？

//读取的为字节 需要进行转码 转码不可能刚好转的就是文本内容,

//一页的末尾 和开始出有可能乱码 每一次多读30个字节 是为了第一页乱码位置

//在第二页就可以正常显示出内容 不影响阅读


    private String read(){
        //内容重叠防止 末尾字节乱码
        byte[] buffer = new byte[SIZE+8];
        //多一个缓存区，避免出现乱码
        try {
            readFile.read(buffer);
        } catch (IOException e) {
            e.printStackTrace();
        }
        String str=new String(buffer, Charset.forName("utf-8"));
        str=str.replace("�","");
        return str;
    }

    //上一页功能的实现
    public String getPre(){
        String content = null;
        //第一页 的情况 定位在0字节处 读取内容 当前页数不改变
        if(currentpage <= 1){
            currentpage=0;
            seek(currentpage);
            content =read();
        }else{
            //其它页 则定位到当前页-2 处 在读取指定字节内容 例如当前定位到第二页的末尾 2*SIZE  上一页应该是第一页 也就是从0位置 开始读取SIZE个字节
            seek(currentpage-2);
            content = read();
            currentpage = currentpage - 1;
        }
        return content;
    }

    //下一页功能的实现
    public String getNext(){

        String content = null;
        if(currentpage >= pages){//当前页为最后一页时候,显示的还是 最后一页
            currentpage=pages;
            seek(currentpage);
            content = read();
        }else{
            seek(currentpage);
            content = read();
            currentpage = currentpage +1;
        }
        return content;
    }
    public String getAppoint(long appointpage){
        String content = null;
        currentpage=appointpage;
        seek(appointpage-1);
        content=read();
        return content;
    }
}